﻿using IgrMensageiros.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MODELO;
using log4net;
using System.Data.SqlClient;
using System.Data;
using CONEXAO;

namespace DAO
{
    public class IgrejasDAL : IIgrejas
    {
        private static log4net.ILog log;


        public IgrejasDAL()
        {
            log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            log4net.Config.XmlConfigurator.Configure();   
        }

        public void Gravar(Igrejas pIgrejas)
        {
           SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
           StringBuilder sb = new StringBuilder();
           String vSQL = ""; 

            using (SqlConnection cn = ConexaoBanco.GetConexao())
            {
                try
                {
                    sb.AppendLine("INSERT INTO TB_IGREJA (TIPO_IGREJA, NOME, CNPJ, RESPONSAVEL, CEP, ENDERECO, BAIRRO, NUMERO, CIDADE, ESTADO)");
                    sb.AppendLine(" VALUES ");
                    sb.AppendLine("(@pTipoIgreja, @pNome, @pCnpj, @pResponsavel, @pCep, @pEndereco, @pBairro, @pNumero, @pCidade, @pEstado)");

                    vSQL = sb.ToString();

                    SqlCommand cmd = new SqlCommand(vSQL, cn);
                    cmd.Parameters.Clear();

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add("@pTipoIgreja", SqlDbType.Char).Value = pIgrejas.TipoIgreja;
                    cmd.Parameters.Add("@pNome", SqlDbType.VarChar).Value = pIgrejas.Nome;
                    cmd.Parameters.Add("@pCnpj", SqlDbType.VarChar).Value = pIgrejas.CNPJ;
                    cmd.Parameters.Add("@pResponsavel", SqlDbType.VarChar).Value = pIgrejas.Responsavel;
                    cmd.Parameters.Add("@pCep", SqlDbType.VarChar).Value = pIgrejas.CEP;
                    cmd.Parameters.Add("@pEndereco", SqlDbType.VarChar).Value = pIgrejas.Endereco;
                    cmd.Parameters.Add("@pBairro", SqlDbType.VarChar).Value = pIgrejas.Bairro;
                    cmd.Parameters.Add("@pNumero", SqlDbType.VarChar).Value = pIgrejas.Numero;
                    cmd.Parameters.Add("@pCidade", SqlDbType.VarChar).Value = pIgrejas.Cidade;
                    cmd.Parameters.Add("@pEstado", SqlDbType.VarChar).Value = pIgrejas.Estado;

                    cn.Open();
                    cmd.ExecuteNonQuery();

                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    throw;
                }
                finally
                {
                    cn.Close();
                }
            }
        }

        public void Deletar(int pID)
        {
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
            using (SqlConnection cn = ConexaoBanco.GetConexao())
            {
                try
                {
                    String Sql = "DELETE FROM TB_IGREJA WHERE ID = @ID)";
                    SqlCommand cmd = new SqlCommand(Sql, cn);
                    cmd.Parameters.Clear();

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add("@ID", SqlDbType.Int).Value = pID;
                    cn.Open();
                    cmd.ExecuteNonQuery();
                    cn.Close();
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    throw;
                }
                finally
                {
                    cn.Close();
                }
            }
        }

        public void Alterar(Igrejas pIgrejas)
        {
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
             StringBuilder sb = new StringBuilder();
            String vSQL = ""; 

            using (SqlConnection cn = ConexaoBanco.GetConexao())
            {
                try
                {
                    sb.AppendLine("UPDATE TB_IGREJA SET (BAIRRO = @pBairro, CEP = @pCEP, CIDADE = @pCidade, CNPJ = @pCNPJ, ENDERECO = @pEndereco, ESTADO = @pEstado, NOME = @pNome, NUMERO = @pNumero, RESPONSAVEL = @pResponsavel, TIPOIGREJA = @pTipoIgreja");
                    sb.AppendLine("WHERE ID = @ID)");

                    vSQL = sb.ToString();

                    SqlCommand cmd = new SqlCommand(vSQL, cn);
                    cmd.Parameters.Clear();

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add("@pID", SqlDbType.Int).Value = pIgrejas.ID;
                    cmd.Parameters.Add("@pBairro", SqlDbType.VarChar).Value = pIgrejas.Bairro;
                    cmd.Parameters.Add("@pCEP", SqlDbType.VarChar).Value = pIgrejas.CEP;
                    cmd.Parameters.Add("@pCidade", SqlDbType.VarChar).Value = pIgrejas.Cidade;
                    cmd.Parameters.Add("@pCNPJ", SqlDbType.VarChar).Value = pIgrejas.CNPJ;
                    cmd.Parameters.Add("@pEndereco", SqlDbType.VarChar).Value = pIgrejas.Endereco;
                    cmd.Parameters.Add("@pEstado", SqlDbType.VarChar).Value = pIgrejas.Estado;
                    cmd.Parameters.Add("@pNome", SqlDbType.VarChar).Value = pIgrejas.Nome;
                    cmd.Parameters.Add("@pNumero", SqlDbType.VarChar).Value = pIgrejas.Numero;
                    cmd.Parameters.Add("@pResponsavel", SqlDbType.VarChar).Value = pIgrejas.Responsavel;
                    cmd.Parameters.Add("@pTipoIgreja", SqlDbType.Char).Value = pIgrejas.TipoIgreja;
                    
                    cn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    throw;
                }
                finally
                {
                    cn.Close();
                }
            }
        }

        public DataSet Listar(Igrejas pIgrejas)
        {
             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
            DataSet lstDataSet = new DataSet();

            using (SqlConnection cn = ConexaoBanco.GetConexao())
            {
                try
                {
                    String Sql = "SELECT * FROM TB_IGREJA WHERE ID = @pUSUARIO";
                    SqlCommand cmd = new SqlCommand(Sql, cn);
                    cmd.Parameters.Clear();

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add("@pUSUARIO", SqlDbType.Text).Value = pIgrejas.ID;
                    cn.Open();
                    sqlDataAdapter.SelectCommand = cmd;
                    sqlDataAdapter.Fill(lstDataSet);

                    return lstDataSet;
                }
                catch (SqlException ex)
                {
                    log.Error(ex);
                    throw new Exception("ERRO:" + ex.Message);
                }
                finally
                {
                    cn.Close();
                }
            }
        }

        public DataSet GetIgrejas(Igrejas pIgrejas)
        {
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
            DataSet lstDataSet = new DataSet();

            using (SqlConnection cn = ConexaoBanco.GetConexao())
            {
                try
                {
                    String Sql = "SELECT * FROM TB_IGREJA WHERE NOME = @pNOME";
                    SqlCommand cmd = new SqlCommand(Sql, cn);
                    cmd.Parameters.Clear();

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.Add("@pNOME", SqlDbType.VarChar).Value = pIgrejas.Nome;
                    cn.Open();
                    sqlDataAdapter.SelectCommand = cmd;
                    sqlDataAdapter.Fill(lstDataSet);

                    return lstDataSet;
                }
                catch (SqlException ex)
                {
                    log.Error(ex);
                    throw new Exception("ERRO:" + ex.Message);
                }
                finally
                {
                    cn.Close();
                }
            }
        }

    }
}
